import numpy as np
import matplotlib.pyplot as plt
from sklearn.svm import SVC

svc=SVC(C=1,gamma=100)

data=np.loadtxt('coffee.txt',delimiter=',')
x=data[:,:-1]
y=data[:,-1]

np.random.seed(666)
a=np.random.permutation(len(x))
x=x[a]
y=y[a]

num=int(0.7*len(x))
train_x,test_x=np.split(x,[num,])
train_y,test_y=np.split(y,[num,])

svc.fit(train_x,train_y)

print(svc.score(train_x,train_y))
print(svc.score(test_x,test_y))

#找出第一个特征的最大值最小值
min_x1,max_x1=np.min(x[:,0]),np.max(x[:,0])
#第二个特征的最大值最小值
min_x2,max_x2=np.min(x[:,1]),np.max(x[:,1])
#以两个特征的最大最小值为边界，进行网格划分
#划分成300*300 即90000个点
#xx:为横坐标矩阵
#yy:为纵坐标矩阵
#形状均为300*300
xx,yy=np.mgrid[min_x1:max_x1:300j,min_x2:max_x2:300j]
#将xx,yy 展平 拼接到一起
xy=np.c_[xx.ravel(),yy.ravel()]
#传入距离函数，算出每个点到超平面的距离
z=svc.decision_function(xy).reshape(xx.shape)
#大于0为正类别 画一个颜色
#小余0为负类别，画成另一个颜色
plt.contourf(xx,yy,z>0)
#等高线
plt.contour(xx,yy,z,colors=['r','w','g'],linestyles=['--','-','--'],levels=[-0.3,0,0.3])
# 画出样本点
plt.scatter(x[:,0],x[:,1],c=y,cmap=plt.cm.Paired)
plt.show()